package com.metier;
import java.util.List;
import java.util.ArrayList;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;

/**
 * Classe metier Station
 * 
 * Permet l'instanciation d'un objet de type Station
 * 
 * @author b0dian
 * @version 1.0
 */
@Entity
@Table(name="station")
public class Station {
    @Id
    @GeneratedValue
    @Column(name="idStation")
	private int idStation;
    @OneToMany
    @JoinColumn(name="idStation")
	private List<Borne> lesBornes;
    @Column(name="libelleEmplacement")
	private String libelleEmplacement;

	public Station()
    {
        super();
    }

    /**
	 * Constructeur public, cree l'instance de Station qui sera sollicitee pour
	 * toutes les methodes de la classe
	 * 
	 * @param idStation
	 *            de type int
	 * @param libelleEmplacement
	 *            de type String
	 */
	public Station(int idStation, String libelleEmplacement) {
		super();
		this.idStation = idStation;
		this.libelleEmplacement = libelleEmplacement;
		this.lesBornes = new ArrayList<Borne>();
	}

	/**
	 * Constructeur public surcharge, cree l'instance de Station sans l'id qui
	 * est auto dans la base de donne qui sera sollicitee pour toutes les
	 * methodes de la classe
	 * 
	 * @param libelleEmplacement
	 *            de type String
	 */
	public Station(String libelleEmplacement) {
		super();
		this.libelleEmplacement = libelleEmplacement;
		this.lesBornes = new ArrayList<Borne>();
	}
	
	/**
     * Modificateur sur la propriete idStation nomme setIdStation et qui modifie
     * l'id de la Station
     * 
     * @param idStation de type int
     */
	public void setIdStation(int idStation)
    {
        this.idStation = idStation;
    }

    /**
	 * Accesseur sur la propriete idStation nomme getIdStation et qui renvoie
	 * l'id de la Station
	 * 
	 * @return idStation de type int
	 */
	public int getIdStation() {
		return idStation;
	}

	/**
	 * Accesseur sur la propriete lesBornes nomme getLesBornes et qui renvoie
	 * une collection de bornes
	 * 
	 * @return lesBornes de type colection de bornes
	 */
	public List<Borne> getLesBornes() {
		return lesBornes;
	}

	/**
	 * Modificateur sur la propriete lesBornes nomme setLesBornes et qui modifie
	 * la collection de bornes
	 * 
	 * @param lesBornes
	 *            de type collection de bornes
	 */
	public void setLesBornes(List<Borne> lesBornes) {
		this.lesBornes = lesBornes;
	}

	/**
	 * Accesseur sur la propriete libelleEmplacement nomme getLibelleEmplacement
	 * et qui renvoie le libelle emplacement
	 * 
	 * @return libelleEmplacement de type String
	 */
	public String getLibelleEmplacement() {
		return libelleEmplacement;
	}

	/**
	 * Modificateur sur la propriete libelleEmplacement nomme
	 * setLibelleEmplacement et qui modifie le libelle emplacement
	 * 
	 * @param libelleEmplacement
	 *            de type String
	 */
	public void setLibelleEmplacement(String libelleEmplacement) {
		this.libelleEmplacement = libelleEmplacement;
	}

	/**
	 * Accesseur sur la propriete lesBornes nomme GetNbBorne et qui renvoie le
	 * nombres de bornes de la station
	 * 
	 * @return lesBornes.size() de type int
	 */
	public int GetNbBorne() {
		return lesBornes.size();
	}

	/**
	 * Modificateur sur la propriete lesBornes qui permet d'ajouter une borne b
	 * passe en paramètre a cette station
	 * 
	 * @param b
	 *            de type Borne
	 */
	public void ajoutBorne(Borne b) {
		lesBornes.add(b);
	}

	/**
	 * Accesseur permettant de renvoyer l'ensemble des informations d'une
	 * Station sous forme d'une chaine de carractères
	 * 
	 * @return une chaine de type String
	 */
	public String ToString() {
		return "Stations existantes : \n\tidStation : " + idStation
				+ "\n\tEmplacement : " + libelleEmplacement;
	}
}
